img
Monorepo를 알아보자2024.06.06monorepo

1. 모노레포의 등장 배경

기존 모놀로식 애플리케이션의 문제점

모노레포는 기존 모놀리식 애플리케이션의 한계를 극복하기 위해 등장했다.

모놀리식 애플리케이션이란 모듈화 없이 설계된 애플리케이션을 말한다

모놀리식 방식으로 서비스를 개발한다면 코드가 서로 직접적으로 의존하며 관심 분리가 제대로 이루어지지 않는다.

또한 설계, 리팩토링, 배포와 같은 작업을 매번 거대한 단위로 처리하므로 많은 제약과 어려움이 생긴다.

이러한 한계점은 모듈화 를 통해 해결할 수 있다. 모듈식 프로그래밍을 통해 일부 로직을 재사용 할 수 있도록 하고 서비스의 일부분만 수정하는 것으로 모놀로식 구조의 한계점을 일부 극복할 수 있다.

멀티레포

모듈의 관리를 용이하게 하기 위해서 독자적인 저장소를 만드는 구조를 멀티레포 구조라고 한다.

각 저장소는 독립적인 프로젝트가 되며 독립적인 개발, 테스트, 배포 등이 이루어진 다.

멀티레포 방식은 현재 서비스를 개발하는 표준적인 방식이다. 업계는 팀의 자율성 때문에 이러한 방식을 선호한다.

멀티레포 방식에는 문제가 없을 것 같지만 장점인 자율성 이 단점으로 작용한다. 자율성은 독립적인 구조에 의해 제공되며 이러한 독립성은 팀원들간의 협업을 방해한다.

모노레포의 등장

위와 같은 멀티레포 방식의 단점인 독립적인 구조를 해결하기 위해 등장한 방식이다.

멀티레포 방식과 유사하지만 독자적인 프로젝트를 같은 저장소에 넣는 것으로 독립성 문제를 해결한다.

단순히 같은 저장소에 여러개의 프로젝트를 넣는다고 모노레포 구조가 아닌 서로간의 의존성 이 존재하는 구조를 모노레포 구조라고 부른다.

쉽게 말해서 서로 연관이 있는 프로젝트를 같은 저장소에 저장하는 방식이다.

꼭 모노레포를 써야 하나?

멀티레포와 모노레포간의 장단점이 교차하기 때문에 상황에 맞는 적절한 구조를 선택하는것이 중요하다.

모노레포가 적절한 상황은 다음과 같다.

  • 유사한 제품의 집합
  • 여러 프로젝트의 변화를 한눈에 파악해야 할 때
  • 호스트 애플리케이션을 플러그인 등으로 확장할 때
  • 공통 기능을 재사용하는 관련된 프로젝트의 집합
  • 유사한 DevOps로 구성된 프로젝트의 집합

모노레포 구축을 위한 도구

[2022.stateofjs] (https://2022.stateofjs.com/en-US/libraries/monorepo-tools/) 에서 확인한 사용률은 아래와 같다.

Yarn, npm, Lerna, pnpm 등이 많이 사용되고 있다.

© 2023 DoHi0512 powerd by DoHi.log